aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--html.c4
-rw-r--r--roff.716
-rw-r--r--term_ascii.c32
-rw-r--r--term_ps.c40
4 files changed, 60 insertions, 32 deletions
diff --git a/html.c b/html.c
index 0fd6f04d..056d287f 100644
--- a/html.c
+++ b/html.c
@@ -1,4 +1,4 @@
-/* $Id: html.c,v 1.161 2014/08/13 15:25:22 schwarze Exp $ */
+/* $Id: html.c,v 1.162 2014/08/13 20:34:29 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -760,6 +760,8 @@ bufcat_su(struct html *h, const char *p, const struct roffsu *su)
v = su->scale;
if (SCALE_MM == su->unit && 0.0 == (v /= 100.0))
v = 1.0;
+ else if (SCALE_BU == su->unit)
+ v /= 24.0;
bufcat_fmt(h, "%s: %.2f%s;", p, v, roffscales[su->unit]);
}
diff --git a/roff.7 b/roff.7
index bc2f24e4..db2ea324 100644
--- a/roff.7
+++ b/roff.7
@@ -1,4 +1,4 @@
-.\" $Id: roff.7,v 1.55 2014/07/07 11:35:06 schwarze Exp $
+.\" $Id: roff.7,v 1.56 2014/08/13 20:34:29 kristaps Exp $
.\"
.\" Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2010, 2011, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: July 7 2014 $
+.Dd $Mdocdate: August 13 2014 $
.Dt ROFF 7
.Os
.Sh NAME
@@ -239,8 +239,9 @@ pica (~1/6 inch)
.It p
point (~1/72 inch)
.It f
-synonym for
+scale
.Sq u
+by 65536
.It v
default vertical span
.It m
@@ -254,7 +255,7 @@ width of rendered
.Pq en
character
.It u
-default horizontal span
+default horizontal span for the terminal
.It M
mini-em (~1/100 em)
.El
@@ -262,7 +263,6 @@ mini-em (~1/100 em)
Using anything other than
.Sq m ,
.Sq n ,
-.Sq u ,
or
.Sq v
is necessarily non-portable across output media.
@@ -1348,6 +1348,12 @@ refers to groff version 1.15.
.Pp
.Bl -dash -compact
.It
+The
+.Sq u
+scaling unit is the default terminal unit.
+In traditional troff systems, this unit would change depending on the
+output media.
+.It
In mandoc, the
.Sx \&EQ ,
.Sx \&TE ,
diff --git a/term_ascii.c b/term_ascii.c
index eeea9dbb..a1b445d2 100644
--- a/term_ascii.c
+++ b/term_ascii.c
@@ -1,4 +1,4 @@
-/* $Id: term_ascii.c,v 1.28 2014/08/10 23:54:41 schwarze Exp $ */
+/* $Id: term_ascii.c,v 1.29 2014/08/13 20:34:29 kristaps Exp $ */
/*
* Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -230,32 +230,42 @@ ascii_hspan(const struct termp *p, const struct roffsu *su)
double r;
/*
- * Approximate based on character width. These are generated
- * entirely by eyeballing the screen, but appear to be correct.
+ * Approximate based on character width.
+ * None of these will be actually correct given that an inch on
+ * the screen depends on character size, terminal, etc., etc.
*/
-
switch (su->unit) {
+ case SCALE_BU:
+ r = su->scale * 10.0 / 240.0;
+ break;
case SCALE_CM:
- r = su->scale * 4.0;
+ r = su->scale * 10.0 / 2.54;
+ break;
+ case SCALE_FS:
+ r = su->scale * 2730.666;
break;
case SCALE_IN:
r = su->scale * 10.0;
break;
+ case SCALE_MM:
+ r = su->scale / 100.0;
+ break;
case SCALE_PC:
- r = (su->scale * 10.0) / 6.0;
+ r = su->scale * 10.0 / 6.0;
break;
case SCALE_PT:
- r = (su->scale * 10.0) / 72.0;
- break;
- case SCALE_MM:
- r = su->scale / 1000.0;
+ r = su->scale * 10.0 / 72.0;
break;
case SCALE_VS:
r = su->scale * 2.0 - 1.0;
break;
- default:
+ case SCALE_EN:
+ case SCALE_EM:
r = su->scale;
break;
+ case SCALE_MAX:
+ abort();
+ break;
}
return(r);
diff --git a/term_ps.c b/term_ps.c
index 1460ed64..2c675acb 100644
--- a/term_ps.c
+++ b/term_ps.c
@@ -1,4 +1,4 @@
-/* $Id: term_ps.c,v 1.63 2014/08/10 23:54:41 schwarze Exp $ */
+/* $Id: term_ps.c,v 1.64 2014/08/13 20:34:29 kristaps Exp $ */
/*
* Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -1115,31 +1115,41 @@ ps_hspan(const struct termp *p, const struct roffsu *su)
* All of these measurements are derived by converting from the
* native measurement to AFM units.
*/
-
switch (su->unit) {
- case SCALE_CM:
- r = PNT2AFM(p, su->scale * 28.34);
- break;
- case SCALE_IN:
- r = PNT2AFM(p, su->scale * 72.0);
- break;
- case SCALE_PC:
- r = PNT2AFM(p, su->scale * 12.0);
+ case SCALE_BU:
+ /*
+ * Traditionally, the default unit is fixed to the
+ * output media. So this would refer to the point. In
+ * mandoc(1), however, we stick to the default terminal
+ * scaling unit so that output is the same regardless
+ * the media.
+ */
+ r = PNT2AFM(p, su->scale * 72.0 / 240.0);
break;
- case SCALE_PT:
- r = PNT2AFM(p, su->scale * 100.0);
+ case SCALE_CM:
+ r = PNT2AFM(p, su->scale * 72.0 / 2.54);
break;
case SCALE_EM:
r = su->scale *
fonts[(int)TERMFONT_NONE].gly[109 - 32].wx;
break;
- case SCALE_MM:
- r = PNT2AFM(p, su->scale * 2.834);
- break;
case SCALE_EN:
r = su->scale *
fonts[(int)TERMFONT_NONE].gly[110 - 32].wx;
break;
+ case SCALE_IN:
+ r = PNT2AFM(p, su->scale * 72.0);
+ break;
+ case SCALE_MM:
+ r = su->scale *
+ fonts[(int)TERMFONT_NONE].gly[109 - 32].wx / 100.0;
+ break;
+ case SCALE_PC:
+ r = PNT2AFM(p, su->scale * 12.0);
+ break;
+ case SCALE_PT:
+ r = PNT2AFM(p, su->scale * 1.0);
+ break;
case SCALE_VS:
r = su->scale * p->ps->lineheight;
break;