aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2014-08-13 20:34:29 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2014-08-13 20:34:29 +0000
commitbafbe43e726d9ae496298a955d858961da9e8ba4 (patch)
tree4fe5bcd60931d948647fc4ccaaaf881845e51b33
parent08b7f86267663883d71e98c502652ec334c232bc (diff)
downloadmandoc-bafbe43e726d9ae496298a955d858961da9e8ba4.tar.gz
mandoc-bafbe43e726d9ae496298a955d858961da9e8ba4.tar.zst
mandoc-bafbe43e726d9ae496298a955d858961da9e8ba4.zip
Begin cleaning up scaling units.
Start with the horizontal terminal specifiers, making sure that they match up with troff. Then move on to PS, PDF, and HTML, noting that we stick to the terminal default width for "u". Lastly, fix some completely-wrong documentation and note that we diverge from troff w/r/t "u".
-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;