aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2015-01-23 00:42:00 +0000
committerIngo Schwarze <schwarze@openbsd.org>2015-01-23 00:42:00 +0000
commit5d66739b249d811455e368f2eb74af651ba8ffac (patch)
treec755c7ea7ca5da728c276e9ea0971aeb8cccfbbb
parent3f21939a391eaea3a1eab39d7ae539fdd04cb52a (diff)
downloadmandoc-5d66739b249d811455e368f2eb74af651ba8ffac.tar.gz
mandoc-5d66739b249d811455e368f2eb74af651ba8ffac.tar.zst
mandoc-5d66739b249d811455e368f2eb74af651ba8ffac.zip
Wonders of roff(7): Integer numbers in numerical expressions can carry
scaling units, and some manuals (e.g. in devel/grcs) actually use that, so let's support it. Missing feature reported by naddy@.
-rw-r--r--roff.712
-rw-r--r--roff.c44
2 files changed, 51 insertions, 5 deletions
diff --git a/roff.7 b/roff.7
index a5fbe9d4..64a43bcd 100644
--- a/roff.7
+++ b/roff.7
@@ -1,4 +1,4 @@
-.\" $Id: roff.7,v 1.66 2015/01/22 00:09:03 schwarze Exp $
+.\" $Id: roff.7,v 1.67 2015/01/23 00:42:00 schwarze 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: January 22 2015 $
+.Dd $Mdocdate: January 23 2015 $
.Dt ROFF 7
.Os
.Sh NAME
@@ -1715,6 +1715,14 @@ prefixed by an optional sign
.Sq +
or
.Sq - .
+Each number may be followed by one optional scaling unit described below
+.Sx Scaling Widths .
+The following equations hold:
+.Bd -literal -offset indent
+1i = 6v = 6P = 10m = 10n = 72p = 1000M = 240u = 240
+254c = 100i = 24000u = 24000
+1f = 65536u = 65536
+.Ed
.Pp
The following binary operators are implemented.
Unless otherwise stated, they behave as in the C language:
diff --git a/roff.c b/roff.c
index 875c1603..a09a5525 100644
--- a/roff.c
+++ b/roff.c
@@ -1,4 +1,4 @@
-/* $Id: roff.c,v 1.253 2015/01/22 22:51:43 schwarze Exp $ */
+/* $Id: roff.c,v 1.254 2015/01/23 00:42:00 schwarze Exp $ */
/*
* Copyright (c) 2010, 2011, 2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -1641,8 +1641,46 @@ roff_getnum(const char *v, int *pos, int *res)
if (n)
*res = -*res;
- *pos = p;
- return 1;
+ /* Each number may be followed by one optional scaling unit. */
+
+ switch (v[p]) {
+ case 'f':
+ *res *= 65536;
+ break;
+ case 'i':
+ *res *= 240;
+ break;
+ case 'c':
+ *res *= 240;
+ *res /= 2.54;
+ break;
+ case 'v':
+ /* FALLTROUGH */
+ case 'P':
+ *res *= 40;
+ break;
+ case 'm':
+ /* FALLTROUGH */
+ case 'n':
+ *res *= 24;
+ break;
+ case 'p':
+ *res *= 10;
+ *res /= 3;
+ break;
+ case 'u':
+ break;
+ case 'M':
+ *res *= 6;
+ *res /= 25;
+ break;
+ default:
+ p--;
+ break;
+ }
+
+ *pos = p + 1;
+ return(1);
}
/*